home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / stdlib1.exe / lha / STRDEL.ASM < prev    next >
Assembly Source File  |  1990-08-08  |  1KB  |  75 lines

  1. stdlib        segment    para public 'slcode'
  2.         assume    cs:stdlib
  3. ;
  4. ;
  5. ; strdel- deletes characters from a string.
  6. ;
  7. ; inputs:
  8. ;
  9. ;    ES:DI- Points at the string to delete characters from.
  10. ;
  11. ;    CX-    Index into source string (ES:DI) to begin deletion.
  12. ;
  13. ;    AX-    Number of characters to delete.
  14. ;
  15. ;
  16. ;
  17.         public    sl_strdel
  18. ;
  19. ;
  20. sl_strdel    proc    far
  21.         or    ax, ax            ;Any chars to delete?
  22.         jnz    DoDelete
  23.         ret
  24. ;
  25. DoDelete:    push    es
  26.         push    di
  27.         push    si
  28.         push    ds
  29.         push    ax
  30.         push    bx
  31.         push    cx
  32.         mov    bx, ax            ;Save length
  33. ;
  34. ; First, search for the insertion point and make sure it doesn't occur
  35. ; beyond the end of the string:
  36. ;
  37.         mov    al, 0
  38.     repne    scasb
  39.         jz    DelDone            ;Quit if insertion after len.
  40.         mov    ax, es
  41.         mov    ds, ax
  42.         mov    si, di            ;Search for end of string.
  43.         mov    cx, bx
  44. SrchEOS:    lodsb
  45.         cmp    al, 0
  46.         jz    DelToEOS
  47.         loop    SrchEOS
  48. ;
  49. ; At this point, we've covered "BX" characters (bx holds # of chars to delete)
  50. ; so copy the rest of the string to the deletion point.
  51. ;
  52. CpyEOS:        lodsb
  53.         stosb
  54.         cmp    al, 0
  55.         jnz    CpyEOS
  56.         jmp    short DelDone
  57. ;
  58. ; Done here, we reached the end of the string before covering the # of chars
  59. ; to delete, so simply chop the string off at the deletion point.
  60. ;
  61. DelToEOS:    mov    byte ptr [di], 0
  62. DelDone:    pop    cx
  63.         pop    bx
  64.         pop    ax
  65.         pop    ds
  66.         pop    si
  67.         pop    di
  68.         pop    es
  69.         ret
  70. sl_strdel    endp
  71. ;
  72. ;
  73. stdlib        ends
  74.         end
  75.